<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>

        //1.传统方案声明函数 (有名函数 | 匿名函数)
        function fn1(){}
        let fn2 = function(){}
        //2.箭头函数
        //前提: 箭头函数简化匿名函数
        //作用: 让匿名函数的语法更加简洁
        let fn3 = ()=>{}
        //箭头函数参数问题 ()
        //单个参数可以省略()  x => {}
        //多个参数和没有参数不能省略  (x,y) | () => {}
        //箭头函数的箭头问题 => 
        //一定不能省略
        //箭头函数代码块的问题 {}
        //单行代码或者单行带有return {}可以省略  ()=> 单行代码或者单行带有return
        //多行代码不可以省略 | 没有代码  ()=>{}

        //声明一个方法,登录功能,传入账号和密码,返回账号和密码的拼接字符
        let login = (account,password) => account+password;
        //console.log(login('aa','22'));

        //3.函数默认值问题
        //(参数名=默认值)
        //let cul = (x,y=2) => x+y;

        //4.函数的可变参数问题 
        // (...params java的可变参数 数组传递参数 ...必须放在最后 只能有一个可变参数)
        let cul1 = (x,...params)=>{console.log(x,params)}

        cul1(1,2,3,4,5,6);
        cul1(2,[2,2,2,2,2,2,2])

        //5....的扩展使用
        //复制数组
        let arr1 = [1,2,3];
        let arr2 = [4,5,6];
        //...数组 进行数组拆分和解构了
        let arr3 = [...arr1,...arr2];
        console.log(arr3);

        //复制对象
        let p1 = {name:"二狗子"}
        let p2 = {sex:"男"}
        let p3 = {age:18}
        let person = {...p1,...p2,...p3}
        console.log(person);
        
    </script>
</body>
</html>